﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucKiemduyetdangky : System.Web.UI.UserControl
{
    private List<DangkykhoahocEntity> glbLstGrvDatasource = null;
    private List<Khoahoc_HocvienEntity> glbLstKhoahocHocvien = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            napDdlKhoahoc();
            napDulieu(true);
        }
    }
    /// <summary>
    /// Nạp GridView slide
    /// </summary>
    /// <author>liemqv</author>
    /// <create>30/04/2012</create>
    /// <param name="bLoadFromDB">Cho biết có cập nhật lại danh sách từ Database hay không</param>
    /// 
    public void napDulieu(bool bLoadFromDB)
    {
        Int64 PK_iKhoahocID = 0;
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null || Cache["cacheLstKhoahocHocvien"] == null)
        {
            PK_iKhoahocID = iGetPK_iKhoahocID();
            glbLstGrvDatasource = DangkykhoahocBRL.GetByFK_iKhoahocID(PK_iKhoahocID);
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
            glbLstKhoahocHocvien = Khoahoc_HocvienBRL.GetByFK_iKhoahocID(PK_iKhoahocID);
            Cache["cacheLstKhoahocHocvien"] = glbLstKhoahocHocvien;
        }
        glbLstGrvDatasource = (List<DangkykhoahocEntity>)Cache["cacheLstGrvDatasource"];
        glbLstKhoahocHocvien = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có học viên đăng ký khóa học này!</span></p>";
        }
        if(Session["PK_iKhoahocID"] == null)
        {
            Session["PK_iKhoahocID"] = ddlKhoahoc.SelectedValue;
        }
        PK_iKhoahocID = Int64.Parse(Session["PK_iKhoahocID"].ToString());
        ddlKhoahoc.Items.FindByValue(PK_iKhoahocID.ToString()).Selected = true;
        
        grvHocviendangky.DataSource = glbLstGrvDatasource;
        grvHocviendangky.DataKeyNames = new string[] { "PK_iDangkykhoahocID" };
        grvHocviendangky.DataBind();

        grvHocvientrongkhoahoc.DataSource = glbLstKhoahocHocvien;
        grvHocvientrongkhoahoc.DataKeyNames = new string[] { "PK_iKhoahoc_HocvienID" };
        grvHocvientrongkhoahoc.DataBind();
    }

    /// <summary>
    /// Nạp ddlKhoahoc
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    ///
    public void napDdlKhoahoc()
    {
        List<KhoahocEntity> lstKhoahoc = KhoahocBRL.GetAll();
        ddlKhoahoc.DataSource = lstKhoahoc;
        ddlKhoahoc.DataTextField = "sTenkhoahoc";
        ddlKhoahoc.DataValueField = "PK_iKhoahocID";
        ddlKhoahoc.DataBind();
    }

    /// <summary>
    /// Lấy ID của khóa học được chọn
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    ///
    public Int64 iGetPK_iKhoahocID()
    {
        Int64 iRes = 0;
        try
        {
            if (Session["PK_iKhoahocID"] != null)
            {
                iRes = Int64.Parse(Session["PK_iKhoahocID"].ToString());
            }
            else
            {
                iRes = Int64.Parse(ddlKhoahoc.SelectedValue);
            }
        }
        catch (Exception ex)
        {
        }
        return iRes;
    }
    /// <summary>
    /// Lấy ID người dùng đăng nhập
    /// </summary>
    /// <author>liemqv</author>
    /// <create>25/04/2012</create>
    /// 
    public Int64 iGetUserLogin()
    {
        Int64 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int64.Parse(Session["UserID"].ToString());
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    protected void grvHocviendangky_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvHocviendangky.PageIndex = e.NewPageIndex;
        napDulieu(false);
    }
    /// <summary>
    /// Hàm kiểm tra RowCommand
    /// </summary>
    /// <param name="grv">Cho biết áp dụng cho GridView nào</param>
    /// <param name="e">GridViewCommandEventArgs của GridView grv</param>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public void onRowComand(GridView grv, GridViewCommandEventArgs e)
    {
        int iIndex;
        Int64 PK_iDangkykhoahocID;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grv.Rows[iIndex];
        PK_iDangkykhoahocID = Int64.Parse(row.Cells[1].Text);
        if (e.CommandName == "Xoa")
        {
            /*
                * Thực hiện tác vụ xóa
                * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                * Nhưng không phải load lại từ database để hiển thị
                */
            SlideBRL.Remove(PK_iDangkykhoahocID); //Xóa trong database
            //Tìm đối tượng slide theo ID trong danh sách lấy từ cache
            glbLstGrvDatasource = (List<DangkykhoahocEntity>)Cache["cacheLstGrvDatasource"];
            DangkykhoahocEntity oDangkyDelete = glbLstGrvDatasource.Find
            (
                delegate(DangkykhoahocEntity oDangkykhoahoc)
                {
                    return oDangkykhoahoc.PK_iDangkykhoahocID == PK_iDangkykhoahocID;
                }
            );
            if (oDangkyDelete != null)
            {
                glbLstGrvDatasource.Remove(oDangkyDelete); //Xóa trong danh sách
            }
            napDulieu(false);
            divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa đăng ký thành công!</span></p>";
        }
    }
    protected void grvHocviendangky_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        onRowComand(grvHocviendangky, e);
    }
    protected void grvHocviendangky_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<DangkykhoahocEntity> lstShort = (List<DangkykhoahocEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = DangkykhoahocEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napDulieu(false);
    }
    protected void grvHocviendangky_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblHoten = null;
        Label lblNgaysinh = null;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lblHoten = (Label)e.Row.FindControl("lblHoten");
            lblNgaysinh = (Label)e.Row.FindControl("lblNgaysinh");
            if (lblHoten != null && lblNgaysinh != null)
            {
                Int64 PK_iNguoidungID = Int64.Parse(lblHoten.Text);
                NguoidungEntity oHocvien = NguoidungBRL.GetOne(PK_iNguoidungID);
                lblHoten.Text = oHocvien.sHoten;
                lblNgaysinh.Text = oHocvien.dNgaysinh.ToString("dd/MM/yyyy");
            }
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        napDulieu(false);
        divThongbao.InnerHtml = "";
    }
   
    protected void grvHocvientrongkhoahoc_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvHocviendangky.PageIndex = e.NewPageIndex;
        napDulieu(false);
    }
    protected void grvHocvientrongkhoahoc_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Int64 PK_iKhoahoc_HocvienID;
        int iIndex;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grvHocvientrongkhoahoc.Rows[iIndex];
        String str = grvHocvientrongkhoahoc.DataKeys[row.RowIndex].Values["PK_iKhoahoc_HocvienID"].ToString();
        PK_iKhoahoc_HocvienID = Convert.ToInt64(grvHocvientrongkhoahoc.DataKeys[row.RowIndex].Values["PK_iKhoahoc_HocvienID"]);
        if (e.CommandName == "Xoa")
        {
            /*
                * Thực hiện tác vụ xóa
                * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                * Nhưng không phải load lại từ database để hiển thị
                */
            Khoahoc_HocvienBRL.Remove(PK_iKhoahoc_HocvienID);
            glbLstKhoahocHocvien = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
            Khoahoc_HocvienEntity oKhoahocHocvienDelete = glbLstKhoahocHocvien.Find
            (
                delegate(Khoahoc_HocvienEntity oKhoahocHocvien)
                {
                    return oKhoahocHocvien.PK_iKhoahoc_HocvienID == PK_iKhoahoc_HocvienID;
                }
            );
            if (oKhoahocHocvienDelete != null)
            {
                glbLstKhoahocHocvien.Remove(oKhoahocHocvienDelete); //Xóa trong danh sách
            }
            napDulieu(false);
            divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa đăng ký thành công!</span></p>";
        }
    }
    protected void grvHocvientrongkhoahoc_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<Khoahoc_HocvienEntity> lstShort = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
        glbLstKhoahocHocvien = Khoahoc_HocvienEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napDulieu(false);
    }
    protected void grvHocvientrongkhoahoc_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblHoten = null;
        Label lblNgaysinh = null;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lblHoten = (Label)e.Row.FindControl("lblHoten");
            lblNgaysinh = (Label)e.Row.FindControl("lblNgaysinh");
            if (lblHoten != null && lblNgaysinh != null)
            {
                Int64 PK_iNguoidungID = Int64.Parse(lblHoten.Text);
                NguoidungEntity oNguoidung = NguoidungBRL.GetOne(PK_iNguoidungID);
                lblHoten.Text = oNguoidung.sHoten;
                lblNgaysinh.Text = oNguoidung.dNgaysinh.ToString("dd/MM/yyyy");
            }
        }
    }
    protected void lbtnAddToList_Click(object sender, EventArgs e)
    {
        Int64 PK_iKhoahocID = 0;
        Int64 PK_iKhoahoc_HocvienID = 0;
        int iAddCount = 0;
        CheckBox chkItem = null;
        try
        {
            glbLstKhoahocHocvien = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
            glbLstGrvDatasource = (List<DangkykhoahocEntity>)Cache["cacheLstGrvDatasource"];
            PK_iKhoahocID = iGetPK_iKhoahocID();
            iAddCount = 0; //Đếm số lượng bản ghi thêm thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvHocviendangky.Rows)
            {
                chkItem = row.FindControl("chkDelete") as CheckBox;
                if ((chkItem != null) && (chkItem.Checked == true))
                {
                    Int64 FK_iHocvienID = Int64.Parse(row.Cells[2].Text);
                    Khoahoc_HocvienEntity oKhoahoc_Hocvien = new Khoahoc_HocvienEntity();
                    DangkykhoahocEntity oDangkykhoahoc = new DangkykhoahocEntity();
                    oKhoahoc_Hocvien.FK_iKhoahocID = PK_iKhoahocID;
                    oKhoahoc_Hocvien.FK_iHocvienID = FK_iHocvienID;
                    oKhoahoc_Hocvien.iTrangthai = 1;
                    oKhoahoc_Hocvien.sGhichu = "";
                    //Thêm vào danh sách học viên trong khóa học
                    PK_iKhoahoc_HocvienID = Khoahoc_HocvienBRL.Add(oKhoahoc_Hocvien);
                    oKhoahoc_Hocvien.PK_iKhoahoc_HocvienID = PK_iKhoahoc_HocvienID;
                    glbLstKhoahocHocvien.Add(oKhoahoc_Hocvien); //Thêm vào danh sách để hiển thị
                    //
                    //Xóa khỏi danh sách đăng ký
                    Int64 PK_iDangkykhoahocID = Convert.ToInt64(grvHocviendangky.DataKeys[row.RowIndex].Values["PK_iDangkykhoahocID"]);
                    DangkykhoahocBRL.Remove(PK_iDangkykhoahocID);
                    DangkykhoahocEntity oDangkyKhoahocDelete = glbLstGrvDatasource.Find
                    (
                        delegate(DangkykhoahocEntity oDangkykhoahocFound)
                        {
                            return (oDangkykhoahocFound.FK_iKhoahocID == PK_iKhoahocID) && (oDangkykhoahocFound.FK_iHocvienID == FK_iHocvienID);
                        }
                    );
                    if (oDangkyKhoahocDelete != null)
                    {
                        glbLstGrvDatasource.Remove(oDangkyKhoahocDelete); //Xóa trong danh sách
                    }
                    ++iAddCount;
                }
            }
            if (iAddCount > 0)
            {
                napDulieu(false);
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm vào danh sách " + iAddCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnDeleteInList_Click(object sender, EventArgs e)
    {
        try
        {
            glbLstKhoahocHocvien = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
            Khoahoc_HocvienEntity oKhoahoc_HocvienDelete = null;
            int iDeleteCount = 0; //Đếm số lượng bản ghi xóa thành công
            /* Lặp với mỗi hàng, tìm hàng đã chọn, tìm ra ID và xóa theo ID */
            foreach (GridViewRow row in grvHocviendangky.Rows)
            {
                CheckBox chkDelete = row.FindControl("chkDelete") as CheckBox;
                Int64 iID = Convert.ToInt64(grvHocviendangky.DataKeys[row.RowIndex].Values["PK_iKhoahoc_HocvienID"]);
                if ((chkDelete != null) && (chkDelete.Checked == true))
                {
                    Khoahoc_HocvienBRL.Remove(iID); //Xóa trong database
                    /* Tìm đối tượng slide theo ID trong danh sách */
                    oKhoahoc_HocvienDelete = glbLstKhoahocHocvien.Find
                    (
                        delegate(Khoahoc_HocvienEntity oKhoahocHocvien)
                        {
                            return oKhoahocHocvien.PK_iKhoahoc_HocvienID == iID;
                        }
                    );
                    glbLstKhoahocHocvien.Remove(oKhoahoc_HocvienDelete); //xóa trong list cache
                    ++iDeleteCount;
                }
            }
            napDulieu(false);
            if (iDeleteCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa thành công " + iDeleteCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void ddlKhoahoc_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["PK_iKhoahocID"] = ddlKhoahoc.SelectedValue;
        napDulieu(true);
    }
}